package concurrency.basicthreading.demo;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Demo14SettingDefaultHandler {
	
	/**
	 * 如果你知道将要在代码的很多地方需要使用相同的异常处理器，那么更简单的方式是在
	 * Thread类中设置一个静态区域，并将这个处理器设置为默认的未捕获异常处理器。
	 * 
	 * 下面代码中的处理器只有在不存在线程专有的未捕获异常处理器的情况下才会被调用。
	 * 系统会检查线程专有版本，如果没有发现，则检查线程组是否有其专有的
	 * uncaughtExecption()方法。如果也没有，再调用defaultUncaughtExceptionHandler。
	 */
	
	public static void main(String[] args) {
		Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
			
			@Override
			public void uncaughtException(Thread t, Throwable e) {
				System.out.println("Default Uncaugh Exception Handler " + e);
			}
		});
		
		ExecutorService exec = Executors.newCachedThreadPool();
		exec.execute(new Demo14ExceptionThread());
		exec.shutdown();
	}
}
